// 派生Types统一管理增删改查，那查不可能用一次，可能很多地方都会用到
import {GET_MY_LIST,CHANGE_INPUT,ADD_ITEM,DELETE_ITEM,GET_LIST} from './actionTypes'
//const defaultState = {}  //默认数据
// store只是一个仓库，它并没有管理能力，它会把接收到的action自动转发给Reducer,Reducer里只能接收state，不能改变state
// Reudcer只是返回了更改的数据，但是并没有更改store中的数据，store拿到了Reducer的数据，自己对自己进行了更新。
const defaultState = {
//state: 指的是原始仓库里的状态。
//action: 指的是action新传递的状态。
    inputValue : 'Write Something',
    list:[
        '早上4点起床，锻炼身体',
        '中午下班游泳一小时',
        '晚上下班吃饭看电视一小时'
    ]
}
// store的自动推送策略，他把接受到的action自动转发给reducer
export default (state=defaultState,action)=>{
    // action初始的没任何传值情况下的初始值，{type: "@@redux/INITs.s.k.z.u.l"}
    console.log(state,action.type)
    if (action.type===CHANGE_INPUT) {
        let newState=JSON.parse(JSON.stringify(state))//深度拷贝state
        // 改变inputValue的值
        console.log(newState)
        newState.inputValue=action.value
        return newState
    }

    // state值只能传递，不能使用
    // 根据type值编写业务逻辑
    if (action.type===ADD_ITEM) {
        let newState = JSON.parse(JSON.stringify(state))
        // 把当前输入框的值value去push到newstate的list里面，重置当前的inputvalue值为空
        newState.list.push(newState.inputValue)
        newState.inputValue=''
        return newState
    }

    if (action.type===DELETE_ITEM) {
        let newState = JSON.parse(JSON.stringify(state))
        newState.list.splice(action.index,1)//删除数组对应的索引
        return newState
    }
    if (action.type===GET_LIST) {
        // 把后台请求的数据给带到store里面
        console.log(1111111111111)
        let newState = JSON.parse(JSON.stringify(state))
        newState.list=action.data.list
        return newState
    }
    if (action.type===GET_MY_LIST) {
        console.log(12222344444444)
    }
    if (action.type=='change_input') {
        let newState = JSON.parse(JSON.stringify(state))
        newState.inputValue=action.value
        return newState
    } 
    if (action.type==='add_item') {
        let newState = JSON.parse(JSON.stringify(state))
        newState.list.push(newState.inputValue)
        newState.inputValue=''
        return newState
     }
    return state
}